package com.sp.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.sp.model.dto.EmployeeDTO;
import com.sp.model.entity.Employee;

import java.util.List;
import java.util.Map;

/**
 * 管理员服务接口
 *
 * @author tong
 */
public interface EmployeeService extends IService<Employee> {

    /**
     * 管理员登录
     *
     * @param username
     * @param password
     * @param checkCode
     * @param checkCodeId
     * @return
     */
    Employee login(String username, String password, String checkCode, String checkCodeId);

    /**
     * 管理员退出登录
     *
     * @return
     */
    boolean logout();

    /**
     * 生成验证码
     *
     * @param charLen
     * @param lineNum
     * @return
     */
    Map<String, Object> generateCheckCode(int charLen, int lineNum);

    /**
     * 移除被切换的验证码
     *
     * @param checkCodeId
     */
    void removeCheckCode(String checkCodeId);

    /**
     * 根据刷新token判断是否刷新token
     *
     * @param username
     * @param refreshToken
     * @return
     */
    Map<String, String> refreshToken(String username, String refreshToken);

    /**
     * 根据用户名查询管理员数据
     *
     * @param username
     * @return
     */
    Employee selectByUsername(String username);

    /**
     * 新增管理员信息
     *
     * @param employeeDTO
     * @return
     */
    boolean addEmployee(EmployeeDTO employeeDTO);

    /**
     * 根据id（批量）删除管理员信息
     *
     * @param ids
     * @return
     */
    boolean deleteEmployees(List<Integer> ids);

    /**
     * 主管理员修改指定管理员信息
     *
     * @param employeeDTO
     * @return
     */
    boolean updateEmployee(EmployeeDTO employeeDTO);

    /**
     * 根据id查询管理员数据
     *
     * @param id
     * @return
     */
    Employee selectById(Integer id);

    /**
     * 按条件查询所有管理员信息
     *
     * @param currentPage
     * @param pageSize
     * @param employeeDTO
     * @return
     */
    IPage<Employee> page(Integer currentPage, Integer pageSize, EmployeeDTO employeeDTO);

    /**
     * 管理员修改个人信息
     *
     * @param employeeDTO
     * @return
     */
    boolean updateMe(EmployeeDTO employeeDTO);

    /**
     * 管理员修改个人密码
     *
     * @param employeeDTO
     * @return
     */
    boolean updatePassword(EmployeeDTO employeeDTO);

}
